package store

import (
	"context"
	"math"
	"time"

	"github.com/redis/go-redis/v9"
)

var _ Dao = (*daoImpl)(nil)

type Dao interface {
	Init() error
	Greet
	Rank
}

func NewDao(redisCli redis.UniversalClient) Dao {
	return &daoImpl{
		redisRepo: redisCli,
	}
}

type daoImpl struct {
	redisRepo redis.UniversalClient
}

func (d *daoImpl) Init() error {
	ctx := context.Background()

	z := redis.Z{Score: float64(math.MaxInt64), Member: "__MAX__"}
	if ret, err := d.redisRepo.ZAddNX(ctx, activityKey, z).Result(); err != nil {
		return err
	} else if ret > 0 {
		// TODO: 惰性删除属于同步操作，可以利用 unlink 进行异步删除。
		_ = d.redisRepo.Expire(ctx, activityKey, time.Hour*24*40)
	}

	if ret, err := d.redisRepo.SAdd(ctx, activityBanKey, "__BAN__").Result(); err != nil {
		return err
	} else if ret > 0 {
		_ = d.redisRepo.Expire(ctx, activityBanKey, time.Hour*24*40)
	}
	return nil
}
